package com.htfyun.serialport.uartservo.AX12_Servo;

import com.htfyun.serialport.uartservo.ServoControlAttr;

public enum  AX12_instructionAttr{

    none((byte) 0),
    ping((byte) 0x01),//无行为。用于得到状态包。
    read((byte) 0x02),//读取控制表中数据。
    write((byte) 0x03),//向控制表写数据。
    write_reg((byte) 0x04),//与上一指令类似。不过，接收到 Action 指令之前保持 待机模式。
    action((byte) 0x05),//触发由 Reg Write 指令指定的行为。
    reset((byte) 0x06),//将舵机控制表的值改为出厂默认值。
    sync_write((byte) 0x83),//用于同时控制多个舵机
    ;
    private final byte instruction;

    AX12_instructionAttr(byte instruction) {
        this.instruction = instruction;
    }

    public byte getInstruction() {
        return instruction;
    }


    public static ServoControlAttr.Instruction toServoInstruction(AX12_instructionAttr attr) {
        ServoControlAttr.Instruction instruction = ServoControlAttr.Instruction.none;
        switch (attr) {
            case read:
                instruction = ServoControlAttr.Instruction.get;
                break;
            case write:
                instruction = ServoControlAttr.Instruction.set;
                break;
                default:break;
        }
        return instruction;
    }

    public static AX12_instructionAttr toAX12Instruction(ServoControlAttr.Instruction instruction) {
        AX12_instructionAttr attr = none;
        switch (instruction) {
            case set:
                attr = write;
                break;
            case get:
                attr = read;
                break;
            default: break;
        }
        return attr;
    }
}
